import $ from "jquery"

import RecodeUtil from "./recode"
import { sleep, triggerMouseEvent } from "./util"

class DomUtil {
  /**
   * 选择处方问诊管理菜单
   */
  static async selectMenu() {
    const acticveItem = $(".ant-menu-root .ant-menu-item-selected")
    if (acticveItem.text().trim() != "处方问诊管理") {
      const menu = $(
        ".ant-menu-root .ant-menu-submenu-title:contains('数据洞察')"
      )
      if (menu.length > 0) {
        menu.click()
      }

      await sleep(1000)

      const item = $(".ant-menu-root .ant-menu-item:contains('处方问诊管理')")
      if (item.length > 0) {
        item.click()
      }
    }
  }
  /**
   * 点击查询按钮
   */
  static async clickQueryBtn() {
    // 点击查询按钮
    $(".prescription-details button:contains('查 询')").click()
    // 等待一段时间，模拟用户点击操作的延迟
    await sleep(3000)
  }

  /**
   * 切换渠道
   * @param {*} type 1: 先方 2: 新先方
   */
  static async selectChannel(type) {
    const select = $("#consultType").closest(".ant-select-selector")

    if (select.length === 0) {
      return
    }

    try {
      // 找到目标元素并触发点击事件
      triggerMouseEvent(select[0])
    } catch (error) {
      console.error("selectChannel", error)
    }

    // 等待一段时间，模拟用户点击操作的延迟
    await sleep(1000)

    // 找到目标元素并触发点击事件
    $(`.ant-select-item[title="${type}"]`).click()

    // 等待一段时间，模拟用户点击操作的延迟
    await sleep(1000)
  }

  /**
   * 切换页码到 100 页
   */
  static async selectPageSize() {
    const pageSelect = $(".ant-pagination-options .ant-select-selector")

    if (pageSelect.length > 0) {
      try {
        // 找到目标元素并触发点击事件
        triggerMouseEvent(pageSelect[0])
      } catch (error) {
        console.error("selectChannel", error)
      }
    }

    await sleep(1000)

    // 找到目标元素并触发点击事件
    const pageSelectItem = $('.ant-select-item[title="100 / page"]')

    if (pageSelectItem.length > 0) {
      pageSelectItem.click()
    }

    // 等待一段时间，模拟用户点击操作的延迟
    await sleep(1000)
  }

  /**
   * 切换到下一页
   */
  static async clickNextPage() {
    // 找到目标元素并触发点击事件
    $(".ant-pagination-next").click()
    // 等待一段时间，模拟用户点击操作的延迟
    await sleep(3000)
  }

  /**
   * 是否应该点击下一页
   */
  static shouldClickNextPage(currentData = [], type) {
    if (currentData.length === 0) {
      return false
    }
    // 1、查询是否有下一页数据
    const nextPage = $(".ant-pagination-next")
    if (nextPage.hasClass("ant-pagination-disabled")) {
      return false
    }

    // 2. 获取当前页码
    const currentPage = $(".ant-pagination-item-active").text()
    if (currentPage >= "3") {
      return false
    }

    // 3. 检测当前抓取的数据中是否有不是今天的数据
    const endData = currentData[currentData.length - 1]
    if (endData) {
      const endDataTime = new Date(endData.inquiryStartTime)
      const today = new Date()

      // 使用 Date.UTC 比较年、月、日部分
      if (
        Date.UTC(
          endDataTime.getFullYear(),
          endDataTime.getMonth(),
          endDataTime.getDate()
        ) < Date.UTC(today.getFullYear(), today.getMonth(), today.getDate())
      ) {
        return false
      }
    }

    // 4. 检测记录的最后一条数据是否在当前页 通过 sessionId 判断
    const last = RecodeUtil.getLastData(type == "先方" ? 1 : 2)

    if (last) {
      // 检测 currentData 中是否有 last.sessionId
      const sessionId = last.sessionId

      const hasSessionId = currentData.some((item) => {
        return item.sessionId == sessionId
      })
      if (hasSessionId) {
        return false
      }
    }

    return true
  }
}

export default DomUtil
